网上对于call和apply的解释已经非常多了,但是感觉看完之后,还不是特别理解其作用。
对于call、apply最直接的理解就是继承。
我们在面向对象编程的时候,经常会这样写:
function People(name){
this.name = name
}
People.prototype={
food:"fish",
say: function(){
console.log("My Name is "+ this.name +",I love "+this.food);
}
}
var people = new People('www.ghugo.com');
people.say();
以上代码应该很好理解,这时如果我们有一个对象:
hugo2 = {food : "bone"}
我们不想对它重新定义say方法,那么我们可以通过call或apply用People的say方法:
people.say.call(hugo2,'hugo');
也就相当于是这样调用:
hugo2.say() //伪代码,仅作为代码理解用
使用call,也就可以把上面的代码等价于下面的代码:
hugo2 = {
food : "bone",
say: function(){
console.log("My Name is "+ this.name +",I love "+this.food);
}
}
hugo2.say();
可以看出函数调用的三种方式:
obj.myFunc();
myFunc.call(obj,arg);
myFunc.apply(obj,[arg1,arg2..]);
用通俗的话总结一下:就是用别人的东西,所以要call一下
另外,apply和call还有一个作用是改变this的指向,这个网上已经大把解释了,自行google一下吧。说太多反而不好理解。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。